home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Peter Lewis / PNL Libraries / MyPreferences.p < prev    next >
Encoding:
Text File  |  1994-09-27  |  5.3 KB  |  212 lines  |  [TEXT/PJMM]

  1. unit MyPreferences;
  2.  
  3. interface
  4.  
  5.     procedure GetPrefsFolderFSSpec (var fs: FSSpec);
  6.     procedure GetPrefsFSSpec (var fs: FSSpec);
  7.     function OpenPrefsFile (fs: FSSpec): integer;
  8.     function MakePrefsFile (fs: FSSpec): integer;
  9.     procedure GetPrefs (var prefs: prefsRecord);
  10.     procedure SetPrefs (var prefs: prefsRecord);
  11.     procedure JustGetPrefs (var prefs: prefsRecord);
  12.     procedure JustSetPrefs (var prefs: prefsRecord);
  13.     function GetPrefsResource (res: resType; id: integer; var h: handle): integer;
  14.     procedure SetPrefsResource (res: resType; id: integer; h: handle);
  15.  
  16. implementation
  17.  
  18.     uses
  19.         Folders, AppleTalk, Aliases;
  20.  
  21.     procedure MyResolveAliasFile (var fs: FSSpec); { * }
  22.         var
  23.             isfolder, wasalias: boolean;
  24.             oe: OSErr;
  25.             temp: FSSpec;
  26.             has_aliasMgr: boolean;
  27.             gv: longInt;
  28.     begin
  29.         oe := Gestalt(gestaltAliasMgrAttr, gv);
  30.         has_aliasMgr := (oe = noErr) and (BTST(gv, gestaltAliasMgrPresent));
  31.         if has_aliasMgr then begin
  32.             temp := fs;
  33.             oe := ResolveAliasFile(fs, true, isfolder, wasalias);
  34.             if oe <> noErr then
  35.                 fs := temp;
  36.         end;
  37.     end;
  38.  
  39.     procedure GetPrefsFolderFSSpec (var fs: FSSpec);
  40.         var
  41.             gv: longInt;
  42.             oe: OSErr;
  43.             pb: HParamBlockRec;
  44.             sysenv: SysEnvRec;
  45.     begin
  46.         if (Gestalt(gestaltFindFolderAttr, gv) <> noErr) | (not BTST(gv, gestaltFindFolderPresent)) | (FindFolder(kOnSystemDisk, kPreferencesFolderType, kCreateFolder, fs.vRefNum, fs.parID) <> NoErr) then begin
  47.             oe := SysEnvirons(1, sysenv);
  48.             with pb do begin
  49.                 fs.vRefNum := sysenv.sysVRefNum;
  50.                 fs.name := 'Preferences';
  51.                 if DirCreate(sysenv.sysVRefNum, 0, fs.name, fs.parID) <> noErr then begin
  52.                     ioNamePtr := @fs.name;
  53.                     ioVRefNum := fs.vRefNum;
  54.                     ioDirID := 0;
  55.                     ioFDirIndex := 0;
  56.                     if (PBGetCatInfo(@pb, false) = noErr) & (BAND(ioFlAttrib, $0010) <> 0) then
  57.                         fs.parID := pb.ioDirID
  58.                     else
  59.                         fs.parID := 0;
  60.                 end;
  61.             end;
  62.         end;
  63.         fs.name := '';
  64.     end;
  65.  
  66.     procedure GetPrefsFSSpec (var fs: FSSpec);
  67.         var
  68.             oe: OSErr;
  69.             pb: HParamBlockRec;
  70.             s: str255;
  71.             dummy: longInt;
  72.     begin
  73.         GetPrefsFolderFSSpec(fs);
  74.         if prefsFolderStrhIndex > 0 then begin
  75.             GetIndString(s, prefsStrhResID, prefsFolderStrhIndex);
  76.             fs.name := s;
  77.             oe := DirCreate(fs.vRefNum, fs.parID, fs.name, dummy);
  78.             MyResolveAliasFile(fs);
  79.             with pb do begin
  80.                 ioNamePtr := @fs.name;
  81.                 ioVRefNum := fs.vRefNum;
  82.                 ioDirID := fs.parID;
  83.                 ioFDirIndex := 0;
  84.                 if (PBGetCatInfo(@pb, false) = noErr) & (BAND(ioFlAttrib, $0010) <> 0) then
  85.                     fs.parID := pb.ioDirID;
  86.             end;
  87.         end;
  88.         GetIndString(s, prefsStrhResID, prefsNameStrhIndex);
  89.         fs.name := s;
  90.     end;
  91.  
  92.     function OpenPrefsFile (fs: FSSpec): integer;
  93.     begin
  94.         MyResolveAliasFile(fs);
  95.         OpenPrefsFile := HOpenResFile(fs.vRefNum, fs.parID, fs.name, fsRdPerm);
  96.     end;
  97.  
  98.     function MakePrefsFile (fs: FSSpec): integer;
  99.         const
  100.             finderLaunchStrID = -16397;
  101.         var
  102.             oe: OSErr;
  103.             sh: stringHandle;
  104.             s: str255;
  105.             rn: integer;
  106.     begin
  107.         MyResolveAliasFile(fs);
  108.         oe := HCreate(fs.vRefNum, fs.parID, fs.name, prefsCreator, 'pref');
  109.         HCreateResFile(fs.vRefNum, fs.parID, fs.name);
  110.         rn := HOpenResFile(fs.vRefNum, fs.parID, fs.name, fsRdWrPerm);
  111.         if rn <> -1 then begin
  112.             sh := stringHandle(Get1Resource('STR ', finderLaunchStrID));
  113.             if sh = nil then begin
  114.                 GetIndString(s, prefsStrhResID, prefsFinderCommentStrhIndex);
  115.                 sh := NewString(s);
  116.                 if sh <> nil then
  117.                     AddResource(handle(sh), 'STR ', finderLaunchStrID, 'Finder launch string');
  118.             end;
  119.         end;
  120.         MakePrefsFile := rn;
  121.     end;
  122.  
  123.     type
  124.         prefsPtr = ^prefsRecord;
  125.         prefsHandle = ^prefsPtr;
  126.  
  127.     procedure GetPrefs (var prefs: prefsRecord);
  128.         var
  129.             h: handle;
  130.     begin
  131.         h := GetResource(prefsResType, prefsResID);
  132.         prefs.version := -1;
  133.         if (h <> nil) & (GetHandleSize(h) = SizeOf(prefsRecord)) then
  134.             prefs := prefsHandle(h)^^;
  135.         ValidatePrefs(prefs);
  136.     end;
  137.  
  138.     procedure SetPrefs (var prefs: prefsRecord);
  139.         var
  140.             h: handle;
  141.     begin
  142.         h := Get1Resource(prefsResType, prefsResID);
  143.         if h = nil then begin
  144.             h := NewHandle(SizeOf(prefsRecord));
  145.             if h <> nil then
  146.                 AddResource(h, prefsResType, prefsResID, 'Prefs');
  147.         end;
  148.         if h <> nil then begin
  149.             SetHandleSize(h, SizeOf(prefsRecord));
  150.             prefsHandle(h)^^ := prefs;
  151.             ChangedResource(h);
  152.         end;
  153.     end;
  154.  
  155.     procedure JustGetPrefs (var prefs: prefsRecord);
  156.         var
  157.             prefs_fs: FSSpec;
  158.             prefs_rn: integer;
  159.     begin
  160.         GetPrefsFSSpec(prefs_fs);
  161.         prefs_rn := OpenPrefsFile(prefs_fs);
  162.         GetPrefs(prefs);
  163.         if prefs_rn <> -1 then
  164.             CloseResFile(prefs_rn);
  165.     end;
  166.  
  167.     procedure JustSetPrefs (var prefs: prefsRecord);
  168.         var
  169.             prefs_fs: FSSpec;
  170.             prefs_rn: integer;
  171.     begin
  172.         GetPrefsFSSpec(prefs_fs);
  173.         prefs_rn := MakePrefsFile(prefs_fs);
  174.         if prefs_rn <> -1 then begin
  175.             SetPrefs(prefs);
  176.             CloseResFile(prefs_rn);
  177.         end;
  178.     end;
  179.  
  180.     function GetPrefsResource (res: resType; id: integer; var h: handle): integer;
  181.         var
  182.             prefs_fs: FSSpec;
  183.             prefs_rn: integer;
  184.     begin
  185.         GetPrefsFSSpec(prefs_fs);
  186.         prefs_rn := OpenPrefsFile(prefs_fs);
  187.         h := GetResource(res, id);
  188.         GetPrefsResource := prefs_rn;
  189.     end;
  190.  
  191.     procedure SetPrefsResource (res: resType; id: integer; h: handle);
  192.         var
  193.             prefs_fs: FSSpec;
  194.             prefs_rn: integer;
  195.             h2: handle;
  196.     begin
  197.         if h <> nil then begin
  198.             GetPrefsFSSpec(prefs_fs);
  199.             prefs_rn := MakePrefsFile(prefs_fs);
  200.             if prefs_rn <> -1 then begin
  201.                 h2 := Get1Resource(res, id);
  202.                 if h2 <> nil then begin
  203.                     RmveResource(h2);
  204.                     DisposHandle(h2);
  205.                 end;
  206.                 AddResource(h, res, id, '');
  207.                 CloseResFile(prefs_rn);
  208.             end;
  209.         end;
  210.     end;
  211.  
  212. end.